
package pe.edu.pucp.dp1.persistencia.historica;

//import Configuracion.Propiedades;
//import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Generador {
    static int CantidadArchivos = 10000; //Equivalente a la cantidad de autos
    static int ANCHO = 240000;
    static int LARGO = 160000;
    static Properties propiedades = new Propiedades().getProperties();
    static int CantidadMovimientosMaximo = 10000; //Equivalente al tiempo maximo de desplazamiento
    static List<String> placas = new ArrayList<String>();
    
    static Date fecha = new Date();

    
    //JAVIER: DESCOMENTAAAAAAAAAAAAAR!
    public static void main(String[] args) {
        BorrarArchivos();
        System.out.println("Se borraron los archivos");
        GenerarArchivos();
        System.out.println("Se generaron los archivos");

        //new GenerarInterseccionData();        
    }
    

    public static void GenerarRuta(FileWriter escritor) {
        fecha.setDate(aleatorio(7, 1));
        fecha.setHours(aleatorio(23, 0));
        fecha.setMinutes(aleatorio(59, 0));
        fecha.setSeconds(aleatorio(59, 0));
        
        //valor  = minimum + (int)(Math.random()*maximum); 
        //Javier: el "*100"  obliga que este en una avenida
        int x = 0 + (int) (Math.random() * ANCHO / 100) * 100;
        int y = 0 + (int) (Math.random() * LARGO / 100) * 100;
        try {
            //escritor.write(x + " " + y + "\n");
            int direccion = 0, direccion_anterior = 0;
            int CantidadMovimientos = aleatorio(CantidadMovimientosMaximo,CantidadMovimientosMaximo/5 );
            for (int i = 0; i < CantidadMovimientos; i++) {
                if ((x % 100 == 0) && (y % 100 == 0)) { //J: esquina
                    direccion_anterior = direccion;
                    switch (direccion_anterior) {
                        case 1:
                            do {
                                //1=arriba, 2=derecha; 3= abajo; 4 =izquierda
                                direccion = 1 + (int) (Math.random() * 4);
                            } while (direccion == 3);//|| direccion<1);
                            break;
                        case 2:
                            do {
                                //1=arriba, 2=derecha; 3= abajo; 4 =izquierda
                                direccion = 1 + (int) (Math.random() * 4);
                            } while (direccion == 4);//|| direccion<1);
                            break;
                        case 3:
                            do {
                                //1=arriba, 2=derecha; 3= abajo; 4 =izquierda
                                direccion = 1 + (int) (Math.random() * 4);
                            } while (direccion == 1);// || direccion<1);
                            break;
                        case 4:
                            do {
                                //1=arriba, 2=derecha; 3= abajo; 4 =izquierda
                                direccion = 1 + (int) (Math.random() * 4);
                            } while (direccion == 2);// || direccion<1);
                            break;
                        default:
                            direccion = 1 + (int) (Math.random() * 4);
                            break;
                    }

                    direccion_anterior = direccion;
                }
                switch (direccion) {
                    case 1:
                        y++;
                        break;
                    case 2:
                        x++;
                        break;
                    case 3:
                        y--;
                        break;
                    case 4:
                        x--;
                        break;
                    default:
                        break;
                }
                fecha.setSeconds(fecha.getSeconds()+1);
                //escritor.write(x + " " + y +" " +fecha.toString()+"\n");
                escritor.write(String.format("%02d",fecha.getHours())+":"+
                        String.format("%02d",fecha.getMinutes())+":"+
                        String.format("%02d",fecha.getSeconds())+
                        ","+x + "," + y+"\n");
            }
        } catch (IOException ex) {
            Logger.getLogger(Generador.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
    public static void GenerarArchivos() {
        fecha.setYear(2013);
        fecha.setMonth(3);
        fecha.setDate(6);
        
        
        String s;
        for (int i = 0; i < CantidadArchivos; i++) {
            //s = propiedades.getProperty("pathVehiculos") + GenerarPlaca()+ ".txt";
            s = propiedades.getProperty("pathVehiculos") + GenerarNuevaPlaca(i)+ ".txt";
            File archivo = new File(s);
            try {
                FileWriter escritor = new FileWriter(archivo);
                GenerarRuta(escritor);
                escritor.close();
            } catch (IOException ex) {
                Logger.getLogger(Generador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    public static void BorrarArchivos() {
        File[] archivos;
        String ruta = propiedades.getProperty("pathVehiculos");
        System.out.println("ruta = "+ruta);
        File directorio = new File(ruta);
        if (directorio.isDirectory()){
            archivos = directorio.listFiles();
            int cantidadArchivos = archivos.length;
            for (int i = 0; i < cantidadArchivos; i++) {
                File archivo = new File (archivos[i].getAbsolutePath());
                archivo.delete();
            }
        }
    }
    public static String GenerarPlaca() {
        String cadena;
        //System.out.print(""+(int)'0'+"\n");
        // 0 = 48
        // z = 65;
        do {
            int a = 65 + (int) (Math.random() * 25);
            int b = 65 + (int) (Math.random() * 25);
            int c = 65 + (int) (Math.random() * 25);
            int d = 0 + (int) (Math.random() * 9);
            int e = 0 + (int) (Math.random() * 9);
            int f = 0 + (int) (Math.random() * 9);
            cadena = "" + (char) a + (char) b + (char) c + (char) (48 + d) + (char) (48 + e) + (char) (48 + f);
            //System.out.println(cadena);
        } while (placas.contains(cadena));
        placas.add(cadena);
        //System.out.println(cadena);
        return cadena;
    }
    public static String GenerarNuevaPlaca(int i) {
        String cadena ="veh."+String.format("%06d", i)+"."+
                String.format("%04d", fecha.getYear())+
                String.format("%02d",fecha.getMonth())+
                String.format("%02d",fecha.getDate())+".gps";

        return cadena;
    }
    private static int aleatorio(int max,int min) { 
        int num = (int)(Math.round(Math.random() * (max-min))) + min; 
    return num; 
} 



    

    
}
